package com.commonEncryptionAlgorithms.symmetry.AES;

import com.util.FileUtil;

import javax.crypto.SecretKey;
import java.io.File;

// 用的时候秘钥肯定也不是写死的 明文，而是传入的
public class AesUtil {
    private final SecretKey secretKey;

    public AesUtil(SecretKey secretKey) {
        this.secretKey = secretKey;
    }

    /**
     * 加密
     */
    public String encipher(String str) {
        String encipher = null;
        try {
            encipher = AesEncryption.encipher(str, secretKey);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return encipher;
    }

    /**
     * 加密文件为另外一个文件
     *
     * @param sourceFile 原本文件
     * @param targetFile 目标文件
     * @return 成功返回true, 失败返回false
     */
    public boolean encipher(File sourceFile, File targetFile) throws Exception {
//        1. 首先读取一个文件，将文件转换为byte数组
        byte[] bytes = FileUtil.fileToByte(sourceFile);
//        2. 其次将byte进行加密，得到一个byte数组
        byte[] encipher = AesEncryption.encipher(bytes, secretKey);
//        3. 将byte数组写入文件
        boolean b = FileUtil.byteToFile(encipher, targetFile);
        return b;
    }

    /**
     * 解密
     */
    public String decrypt(String str) {
        String decrypt = null;
        try {
            decrypt = AesEncryption.decrypt(str, secretKey);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return decrypt;
    }

    public boolean decrypt(File sourceFile, File targetFile) throws Exception {
//        1. 读取
        byte[] bytes = FileUtil.fileToByte(sourceFile);
//        2. 解密
        byte[] decrypt = AesEncryption.decrypt(bytes, secretKey);
//        3.写入文件
        boolean b = FileUtil.byteToFile(decrypt, targetFile);
        return b;
    }
}
